Remove arbitrary limit on number of redraw rectangles
authorPaul Davis <paul@linuxaudiosystems.com>
Wed, 12 May 2010 10:11:40 +0000 (12:11 +0200)
committerKristian Rietveld <kris@gtk.org>
Wed, 12 May 2010 10:11:40 +0000 (12:11 +0200)
The aim of this limit was to not degrade performance too much, however,
it actually did degrade performance to a large extent.

gdk/quartz/GdkQuartzView.c

index a3a8d2aadbe02aa7140674cb409c99077d546236..02018ff8d07592bed89c96756a7f3bd0470b6a28 100644 (file)
@@ -18,8 +18,9 @@
  * Boston, MA 02111-1307, USA.
  */
 
-
 #import "GdkQuartzView.h"
+#include "gdkregion.h"
+#include "gdkregion-generic.h"
 #include "gdkwindow-quartz.h"
 #include "gdkprivate-quartz.h"
 
     }
 
   [self getRectsBeingDrawn:&drawn_rects count:&count];
-
-  /* Note: arbitrary limit here to not degrade performace too much. It would
-   * be better to optimize the construction of the region below, by using
-   * _gdk_region_new_from_yxbanded_rects.
-   */
-  if (count > 25)
-    {
-      gdk_rect.x = rect.origin.x;
-      gdk_rect.y = rect.origin.y;
-      gdk_rect.width = rect.size.width;
-      gdk_rect.height = rect.size.height;
-
-      region = gdk_region_rectangle (&gdk_rect);
-    }
-  else
+  region = gdk_region_new ();
+  
+  for (i = 0; i < count; i++)
     {
-      region = gdk_region_new ();
-
-      for (i = 0; i < count; i++)
-        {
-          gdk_rect.x = drawn_rects[i].origin.x;
-          gdk_rect.y = drawn_rects[i].origin.y;
-          gdk_rect.width = drawn_rects[i].size.width;
-          gdk_rect.height = drawn_rects[i].size.height;
-
-          gdk_region_union_with_rect (region, &gdk_rect);
-        }
+      gdk_rect.x = drawn_rects[i].origin.x;
+      gdk_rect.y = drawn_rects[i].origin.y;
+      gdk_rect.width = drawn_rects[i].size.width;
+      gdk_rect.height = drawn_rects[i].size.height;
+      
+      gdk_region_union_with_rect (region, &gdk_rect);
     }
 
   impl->in_paint_rect_count++;